/**
 * 
 */
package co.fitstart.mobile.service;

import java.util.Date;
import java.util.List;

import co.fitstart.entity.course.round.CourseRound;
import co.fitstart.entity.course.schedule.CourseSchedule;
import co.fitstart.entity.principal.Principal;
import co.fitstart.entity.site.RoomType;
import co.fitstart.entity.site.Site;
import co.fitstart.entity.user.Student;
import co.fitstart.mobile.entity.appointment.Appointment;
import co.fitstart.mobile.entity.appointment.AppointmentPrepare;
import co.fitstart.mobile.entity.appointment.CoachPrepare;
import co.fitstart.mobile.entity.appointment.RoomPrepare;

/**
 * @author downpour
 *
 */
public interface AppointmentService {
    
    /**
     * 
     * @param student
     * @param courseRound
     */
    public void validate(Student student, CourseRound courseRound);

    /**
     * 
     * @param courseRound
     * @param site
     * @param day
     * @return
     */
    public AppointmentPrepare prepare(CourseRound courseRound, Site site, Date day);
    
    /**
     * 
     * @param appointmentPrepare
     * @param courseRound
     * @param principal
     * @return
     */
    public AppointmentPrepare prepareIndividual(AppointmentPrepare appointmentPrepare, CourseRound courseRound, Principal principal);
    
    /**
     * 
     * @param appointmentPrepare
     * @param courseSchedule
     * @return
     */
    public AppointmentPrepare prepareYear(AppointmentPrepare appointmentPrepare, CourseSchedule courseSchedule);
    
    /**
     * 
     * @param student
     * @param courseRound
     * @param appointment
     */
    public void validateAppointment(Student student, CourseRound courseRound, Appointment appointment);
    
    /**
     * 
     * @param student
     * @param courseRound
     * @param appointment
     * @param selectedScheduleId
     */
    public void validateAppointment(Student student, CourseRound courseRound, Appointment appointment, Long selectedScheduleId);
    
    /**
     * 
     * @param courseRound
     * @param site
     * @param day
     * @param hour
     * @return
     */
    public RoomPrepare prepareRoom(CourseRound courseRound, Site site, Date day, String hour);
    
    /**
     * 
     * @param coach
     * @param day
     * @param hour
     * @param Experience
     * @param scheduleId
     */
    public void validateCoach(Principal coach, Date day, String hour, boolean Experience, Long scheduleId);
    
    /**
     * 
     * @param student
     * @param courseRound
     * @param day
     * @param hour
     */
    public void validateYearCourse(Student student, CourseRound courseRound, Date day, String hour);
    
    /**
     * 
     * @param site
     * @param day
     * @param hour
     * @param experience
     * @return
     */
    public List<CoachPrepare> genereateYearCoach(Site site, Date day, String hour, boolean experience);
    
    /**
     * 
     * @param courseRound
     * @param site
     * @param coach
     * @param roomType
     * @param day
     * @param hour
     */
    public void appointmentSchedule(CourseRound courseRound, Site site, Principal coach, RoomType roomType, Date day, String hour);
    
    /**
     * 
     * @param scheduleId
     * @param coach
     * @param roomType
     * @param site
     * @param day
     * @param hour
     */
    public void changeSchedule(Long scheduleId, Principal coach, RoomType roomType, Site site, Date day, String hour);
    
    /**
     * 
     * @param coach
     * @param day
     * @return
     */
    public List<Site> listSite(Principal coach, Date day);
}
